From: Andrew Cooper Date: Mon, 10 Apr 2017 12:11:06 +0000 (+0100) Subject: x86/emul: Drop more redundant ctxt.event_pending checks X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~2228 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=e412c03be25dee8202a440b973561afd8ab6d868;p=xen.git x86/emul: Drop more redundant ctxt.event_pending checks Since c/s 92cf67888a, x86_emulate_wrapper() asserts stricter behaviour about the relationship between X86EMUL_EXCEPTION and ctxt.event_pending. These removals should have been included in the aforementioned changeset, and were only omitted due an oversight. Signed-off-by: Andrew Cooper Reviewed-by: Paul Durrant Reviewed-by: Jan Beulich Reviewed-by: Kevin Tian Acked-by: Tim Deegan Release-acked-by: Julien Grall --- diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 06b8f1b21c..91e269f80f 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2035,8 +2035,7 @@ int hvm_emulate_one_mmio(unsigned long mfn, unsigned long gla) hvm_dump_emulation_state(XENLOG_G_WARNING "MMCFG", &ctxt); break; case X86EMUL_EXCEPTION: - if ( ctxt.ctxt.event_pending ) - hvm_inject_event(&ctxt.ctxt.event); + hvm_inject_event(&ctxt.ctxt.event); /* fallthrough */ default: hvm_emulate_writeback(&ctxt); @@ -2095,8 +2094,7 @@ void hvm_emulate_one_vm_event(enum emul_kind kind, unsigned int trapnr, hvm_inject_hw_exception(trapnr, errcode); break; case X86EMUL_EXCEPTION: - if ( ctx.ctxt.event_pending ) - hvm_inject_event(&ctx.ctxt.event); + hvm_inject_event(&ctx.ctxt.event); break; } diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index f50d15ff50..9ffe70281b 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3696,8 +3696,7 @@ void hvm_ud_intercept(struct cpu_user_regs *regs) hvm_inject_hw_exception(TRAP_invalid_op, X86_EVENT_NO_EC); break; case X86EMUL_EXCEPTION: - if ( ctxt.ctxt.event_pending ) - hvm_inject_event(&ctxt.ctxt.event); + hvm_inject_event(&ctxt.ctxt.event); /* fall through */ default: hvm_emulate_writeback(&ctxt); diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c index 9e004098cc..67528d965c 100644 --- a/xen/arch/x86/hvm/io.c +++ b/xen/arch/x86/hvm/io.c @@ -100,8 +100,7 @@ bool hvm_emulate_one_insn(hvm_emulate_validate_t *validate) return false; case X86EMUL_EXCEPTION: - if ( ctxt.ctxt.event_pending ) - hvm_inject_event(&ctxt.ctxt.event); + hvm_inject_event(&ctxt.ctxt.event); break; } diff --git a/xen/arch/x86/hvm/vmx/realmode.c b/xen/arch/x86/hvm/vmx/realmode.c index 7b908c726d..4eb423204a 100644 --- a/xen/arch/x86/hvm/vmx/realmode.c +++ b/xen/arch/x86/hvm/vmx/realmode.c @@ -114,21 +114,6 @@ void vmx_realmode_emulate_one(struct hvm_emulate_ctxt *hvmemul_ctxt) if ( rc == X86EMUL_EXCEPTION ) { - if ( !hvmemul_ctxt->ctxt.event_pending ) - { - unsigned long intr_info; - - __vmread(VM_ENTRY_INTR_INFO, &intr_info); - __vmwrite(VM_ENTRY_INTR_INFO, 0); - if ( !(intr_info & INTR_INFO_VALID_MASK) ) - { - gdprintk(XENLOG_ERR, "Exception pending but no info.\n"); - goto fail; - } - hvmemul_ctxt->ctxt.event.vector = (uint8_t)intr_info; - hvmemul_ctxt->ctxt.event.insn_len = 0; - } - if ( unlikely(curr->domain->debugger_attached) && ((hvmemul_ctxt->ctxt.event.vector == TRAP_debug) || (hvmemul_ctxt->ctxt.event.vector == TRAP_int3)) ) diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 5195d614d1..2fb0125741 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3457,7 +3457,7 @@ static int sh_page_fault(struct vcpu *v, r = x86_emulate(&emul_ctxt.ctxt, emul_ops); - if ( r == X86EMUL_EXCEPTION && emul_ctxt.ctxt.event_pending ) + if ( r == X86EMUL_EXCEPTION ) { /* * This emulation covers writes to shadow pagetables. We tolerate #PF diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index d69769fb41..ca0a04a6cb 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -3185,15 +3185,9 @@ static void emulate_gate_op(struct cpu_user_regs *regs) if ( IS_ERR_OR_NULL(state) ) { if ( PTR_ERR(state) == -X86EMUL_EXCEPTION ) - { - ASSERT(ctxt.ctxt.event_pending); pv_inject_event(&ctxt.ctxt.event); - } else - { - ASSERT(!ctxt.ctxt.event_pending); do_guest_trap(TRAP_gp_fault, regs); - } return; } @@ -3234,13 +3228,10 @@ static void emulate_gate_op(struct cpu_user_regs *regs) if ( rc == X86EMUL_EXCEPTION ) { - ASSERT(ctxt.ctxt.event_pending); pv_inject_event(&ctxt.ctxt.event); return; } - ASSERT(!ctxt.ctxt.event_pending); - if ( rc != X86EMUL_OKAY || jump < 0 || (opnd_sel & ~3) != regs->error_code ||